#![allow(dead_code)]
use std::str::FromStr;
use bigdecimal::{BigDecimal, One, RoundingMode, Zero};

fn main() {
    operation()
}

/// 特殊用法
fn special_usage(){
    let _zero = BigDecimal::zero();// 0
    let one = BigDecimal::one();// 1
    let _zero = BigDecimal::default();// 0
    // 原有的值 * 2
    let two = one.double();// 2
    let negative_one = BigDecimal::from_str("-1").unwrap();
    // 绝对值
    let one = negative_one.abs();// 1
    // 原有的值的一半
    let half = one.half();
    // 原有的值的平方
    let square = half.square();
    // 原有的值的立方
    let cube = half.cube();
    // 原有的值的平方根
    let sqrt = half.sqrt().unwrap();
    // 原有的值的立方根
    let cbrt = half.cbrt();
    // 原有的值的倒数
    let inverse = two.inverse();
    // 保留两位小数 4舍5入
    let decimal = BigDecimal::from_str("0.555").unwrap();
    let scale = decimal.with_scale_round(2, RoundingMode::HalfUp);

    println!("{scale}");
    println!("{two}, {one}, {half}, {square}, {cube}, {sqrt}, {cbrt}, {inverse}")
}


/// 运算
fn operation(){
    let dec = BigDecimal::from_str("0.8").unwrap();
    let _100 = BigDecimal::from_str("100").unwrap();
    let _80 = BigDecimal::from_str("80.0").unwrap();
    // 加法
    // let add = dec + _100;
    // 减法
    // let sub = dec - _100;
    // 乘法
    let mul = dec * _100;
    // 除法
    // let div = dec / _100;
    println!("{mul}");
    // 比较
    println!("等于：{}", _80 == mul);
    println!("不等：{}", _80 != mul);
    println!("大于：{}", _80 > mul);
    println!("大于等于：{}", _80 >= mul);
    println!("小于：{}", _80 < mul);
    println!("小于等于：{}", _80 <= mul);

}
